﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Helper_Excel
{
    public partial class Form_Main : Form
    {
        public Form_Main()
        {
            InitializeComponent();
        }
        /*
         * Demo功能简述：导入导出Excel文件
         * 为什么要写这样一个Demo：
         * 以往都是使用Office提供的Excel Library(COM组件)实现的对Excel的操作，此方式缺点有三：
         * ①-运行环境必须装有指定版本的Excel
         * ②-运行环境中指定版本的Excel组件必须正常在操作系统中注册（使用COM组件是要注册的），也就是说，如果机器上虽然装了Excel，但是装的是阉割版、绿色版等奇怪的版本就悲剧了。
         * ③-效率低下，常要注意GC，时常会因为操作不当造成开启一大堆Excel.exe进程占用过高系统资源（这些Excel.exe甚至不会随着你的应用程序的关闭而关闭）。
         * 本Demo操作Excel的方式：
         * 使用组件Aspose.Cells 5.3.0.1 
         * 这是个收费组件，这里用的是破解版。
         * ①-此组件与Office套件脱离，也就是说，运行环境没有安装Excel的情况下也能正常运行。
         * ②-此组件效率较高且易于使用。
         * 
         * 此Demo只写了操作Excel的两个最常用的功能：导入/导出，其它功能使用Aspose.Cells组件也能实现，但不在此Demo中示例。
         * 
         * 导入导出Excel操作类：ExcelHelper.cs
         */
        private void Form_Main_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 导入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImport_Click(object sender, EventArgs e)
        {
            //Debug目录有个Excel文件，供导入
            string path = Application.StartupPath + @"\奔放的胸毛。.xls";
            //读取Excel文件的各Sheet中的数据，填充到DataSet
            DataSet ds = new ExcelHelper().Import(path, 2, true);
            //将DataSet中的数据展示到界面
            Import_Service.DoInput(this, ds);
        }
        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                List<DataTable> dtList = GetDataSource();
                if (dtList.Count < 1)
                {
                    MessageBox.Show("无数据可导出！");
                    return;
                }
                new ExcelHelper().Export(dtList, DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss tttt"), saveFileDialog1.FileName);
            }
        }
        /// <summary>
        /// 获取TableControl各Page中的DataViewGrid的数据源
        /// </summary>
        /// <returns></returns>
        private List<DataTable> GetDataSource()
        {
            List<DataTable> dtList = new List<DataTable>();
            for (int i = 0; i < tabControl1.TabPages.Count; i++)
            {
                TabPage tabPage = tabControl1.TabPages[i];
                //遍历TableControl的所有Page里的控件，找到所有DataGridView的Datasource
                foreach (Control var in tabPage.Controls)
                {
                    if (var is DataGridView)
                    {
                        DataTable dt = (var as DataGridView).DataSource as DataTable;
                        dtList.Add(dt);
                    }
                }
            }
            return dtList;
        }

        private void btnAbout_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("作者：奔放的胸毛。" + Environment.NewLine);
            sb.Append("Email：lyzane.it@gmail.com"+Environment.NewLine);
            sb.Append("Blog：http://www.lyzane.com" + Environment.NewLine);
            sb.Append("" + Environment.NewLine);
            sb.Append("详细过程及要点见源码各处注释" + Environment.NewLine);
            MessageBox.Show(sb.ToString());
        }
    }
}